package org.libtiff.jai.codec;
/*
 * XTIFF: eXtensible TIFF libraries for JAI.
 * 
 * The contents of this file are subject to the  JAVA ADVANCED IMAGING
 * SAMPLE INPUT-OUTPUT CODECS AND WIDGET HANDLING SOURCE CODE  License
 * Version 1.0 (the "License"); You may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.sun.com/software/imaging/JAI/index.html
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License. 
 *
 * The Original Code is JAVA ADVANCED IMAGING SAMPLE INPUT-OUTPUT CODECS
 * AND WIDGET HANDLING SOURCE CODE. 
 * The Initial Developer of the Original Code is: Sun Microsystems, Inc..
 * Portions created by: Niles Ritter 
 * are Copyright (C): Niles Ritter, GeoTIFF.org, 1999,2000.
 * All Rights Reserved.
 * Contributor(s): Niles Ritter
 */

/**
 * An extension of <code>TIFFEncodeParam</code> for encoding images in 
 * the TIFF format using the XTIFF machinery. The encode object creates
 * an empty XTIFFDirectory, which the user may may access and add 
 * whatever XTIFFFields they need for annotation, compression, etc.
 * It shouldn't be necessary to extend this class further, as all
 * parameters will be passed through the XTIFFDirectory.
 */

import com.sun.media.jai.codec.TIFFEncodeParam;

public class XTIFFEncodeParam extends TIFFEncodeParam {
    
	/* inherited: compression, tiled */
	private int _compression;
	private boolean _isTiled;

	/** For XTIFF everything is stored in the directory */
	private XTIFFDirectory directory;

    /** 
     * Promotes an XTIFFEncodeParam object from simpler one
     */
    public XTIFFEncodeParam(TIFFEncodeParam param) {
	initialize();
	if (param==null) return;
	setCompression(param.getCompression());
	setWriteTiled(param.getWriteTiled());
    }

    /** 
     * Constructs an XTIFFEncodeParam object with default values for parameters.
     */
    public XTIFFEncodeParam() {
	initialize();
    }

    /** 
     * Initializes an XTIFFEncodeParam with default values for parameters.
     */
    public void initialize() {
	directory = XTIFFDirectory.create();
	setCompression(COMPRESSION_NONE);
	setWriteTiled(false);
    }

    public XTIFFDirectory getDirectory() {
	return directory;
    }

    /**
     * Specifies the type of compression to be used. The compression type
     * specified will be honored only if it is compatible with the image
     * being written out. 
     *
     * @param compression    The compression type.
     */
    public void setCompression(int compression) {
	directory.setCompression(compression);
	_compression = compression;
    }

    /**
     * Specifies the type of compression to be used. The compression type
     * specified will be honored only if it is compatible with the image
     * being written out. 
     *
     */
    public int getCompression() {
	return _compression;
    }


    /**
     * If set, the data is in tiled format, instead of
     * in strips.
     */
    public boolean getWriteTiled() {
	return _isTiled;
    }

    /**
     * If set, the data will be written out in tiled format, instead of
     * in strips.
     *
     * @param writeTiled     Specifies whether the image data should be 
     *                       wriiten out in tiled format.
     */
    public void setWriteTiled(boolean writeTiled) {
	directory.setIsTiled(writeTiled);
	_isTiled = writeTiled;
    }
}
